﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace IISLogAnalyzer
{
    public partial class FormCharts : Form
    {
        public FormCharts()
        {
            InitializeComponent();
            //InitializePieChart();
            InitializeLineChart();
            
        }

       
        private void InitializePieChart()
        {
            // 确保Chart控件存在  
            if (Chart1 != null)
            {
                // 清除所有现有系列  
                Chart1.Series.Clear();

                // 创建一个新的Series对象  
                Series pieSeries = new Series("PieSeries");

                // 设置Series的ChartType为Pie  
                pieSeries.ChartType = SeriesChartType.Pie;

                // 是否显示数据点标签  
                pieSeries.IsValueShownAsLabel = true;

                // 添加数据点  
                pieSeries.Points.AddXY("类别1", 40);
                pieSeries.Points.AddXY("类别2", 30);
                pieSeries.Points.AddXY("类别3", 20);
                pieSeries.Points.AddXY("类别4", 10);

                // 将Series添加到Chart控件中  
                Chart1.Series.Add(pieSeries);

                // 设置标题（可选）  
                Chart1.Titles.Add("我的饼图");

                // 其他自定义设置...  
            }
        }
        private void InitializeLineChart()
        {
            // 设置图表区域背景色  
            Chart1.ChartAreas[0].BackColor = Color.White;
            Chart1.ChartAreas[0].AxisX.LineColor = Color.Black;
            Chart1.ChartAreas[0].AxisY.LineColor = Color.Black;

            // 设置图例位置  
            Chart1.Legends[0].Position.Auto = false;
            Chart1.Legends[0].Position.X = 10;
            Chart1.Legends[0].Position.Y = 10;
            Chart1.Legends[0].Docking = Docking.Top;
            Chart1.Legends[0].Alignment = StringAlignment.Center;
                        

            // 设置X轴标签格式等  
            Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm"; // 假设X轴是时间，设置格式为小时:分钟  
            Chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Minutes; // 设置X轴刻度间隔类型  
            Chart1.ChartAreas[0].AxisX.Interval = 1; // 设置X轴刻度间隔值  
            Chart1.ChartAreas[0].AxisX.LabelStyle.Angle = -45; // 设置X轴标签倾斜角度

            // 假设Chart1控件已经添加到了窗体上  
            if (Chart1 != null)
            {
                // 清除所有现有系列  
                Chart1.Series.Clear();

                // 设置ChartArea的一些基本属性  
                ChartArea chartArea = new ChartArea();
                chartArea.AxisX.LabelStyle.Format = "HH:mm"; // 设置X轴标签格式为小时:分钟  
                chartArea.AxisX.IntervalType = DateTimeIntervalType.Minutes; // 设置X轴间隔为分钟  
                chartArea.AxisX.Interval = 1; // 设置X轴间隔为1分钟  
                chartArea.AxisY.Title = "值"; // 设置Y轴标题  
                chartArea.AxisX.Title = "时间"; // 设置X轴标题  
                Chart1.ChartAreas.Add(chartArea);

                // 假设我们从早上9点开始，并添加10个数据点  
                DateTime startTime = DateTime.Today.AddHours(9);                
                int minutesToAddPerIteration = 1; // 每次迭代添加的时间间隔，以分钟为单位
                // 创建并添加五个Series对象到Chart控件中  
                for (int i = 0; i < 5; i++)
                {
                    Series series = new Series("Series" + (i + 1));
                    series.ChartType = SeriesChartType.Line; // 设置为折线图  
                    series.BorderWidth = 2; // 设置线条宽度  

                    // 为每个Series添加数据点  
                    for (int j = 0; j < 100; j++)
                    {
                        // 生成一个随机的Y轴值，这里简单起见使用i * 10 + j作为示例  
                        double randomValue = i * 10 + j;
                        // 创建一个表示1分钟的TimeSpan对象  
                        TimeSpan oneMinute = TimeSpan.FromMinutes(1);

                        // 将整数j转换为double，并与oneMinute相乘，得到总的时间间隔  
                        TimeSpan totalInterval = TimeSpan.FromMinutes((double)j * minutesToAddPerIteration);

                        // 将总的时间间隔加到startTime上，得到currentTime  
                        DateTime currentTime = startTime.Add(totalInterval);
                        series.Points.AddXY(currentTime, randomValue); // 添加数据点到Series中  
                    }

                    Chart1.Series.Add(series); // 将Series添加到Chart控件中  
                }

                // 设置图表的标题（可选）  
                Chart1.Titles.Add("时间折线图示例");


                // 设置X轴和Y轴线条加粗  
                Chart1.ChartAreas[0].AxisX.LineWidth = 2;
                Chart1.ChartAreas[0].AxisY.LineWidth = 2;

                // 设置X轴和Y轴刻度线为浅灰色虚线  
                Chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.LightGray;
                Chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
                Chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.LightGray;
                Chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

                // 如果需要设置次要刻度线，也可以这样设置  
                Chart1.ChartAreas[0].AxisX.MinorGrid.LineColor = Color.LightGray;
                Chart1.ChartAreas[0].AxisX.MinorGrid.LineDashStyle = ChartDashStyle.Dash;
                Chart1.ChartAreas[0].AxisY.MinorGrid.LineColor = Color.LightGray;
                Chart1.ChartAreas[0].AxisY.MinorGrid.LineDashStyle = ChartDashStyle.Dash;

                // 如果需要设置X轴和Y轴的标签字体加粗，可以这样设置  
                Chart1.ChartAreas[0].AxisX.LabelStyle.Font = new Font("Microsoft Sans Serif", 8F, FontStyle.Bold);
                Chart1.ChartAreas[0].AxisY.LabelStyle.Font = new Font("Microsoft Sans Serif", 8F, FontStyle.Bold);

                // 还可以设置标题等其他属性进行进一步的美化  
                Chart1.Titles.Add("My Chart Title");
                Chart1.Titles[0].Font = new Font("Microsoft Sans Serif", 10F, FontStyle.Bold);
                Chart1.Titles[0].ForeColor = Color.Black;
                Chart1.Titles[0].Alignment = ContentAlignment.TopCenter;


                Chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;
                Chart1.ChartAreas[0].AxisY.ScrollBar.Enabled = true; // 如果Y轴也需要滚动条

                // 设置滚动条的初始位置为X轴的第一个数据点  
                double firstDataPointValue = Chart1.Series[0].Points[0].XValue;
                Chart1.ChartAreas[0].AxisX.ScaleView.Position = firstDataPointValue;

                // 设置滚动条的大小（即显示的数据范围）  
                double dataRange = Chart1.Series[0].Points[Chart1.Series[0].Points.Count - 1].XValue - firstDataPointValue;
                Chart1.ChartAreas[0].AxisX.ScaleView.Size = dataRange;

                // 刷新图表以显示更改  
                Chart1.Invalidate();
            }
        }
    }
}
